package main

import (
	"encoding/json"
	"fmt"
)

/*
struct & json
	序列化：struct ==> json

	反序列化：struct <== json
*/

// type person struct {
// 	name    string
// 	age     int
// 	address string
// }

// 字段首字母大写，可以让json包访问数据
type person struct {
	Name    string `json:"name"`
	Age     int    `json:"age"`
	Address string `json:"address"`
}

func main() {
	p1 := person{
		Name:    "周玲",
		Age:     18,
		Address: "xxxx",
	}

	// 序列化
	data, err := json.Marshal(p1)
	if err != nil {
		fmt.Printf("err: %v\n", err)
		return
	}
	fmt.Printf("data: %v type:%T\n", data, data)
	fmt.Printf("data: %v\n", string(data))

	// 反序列化
	str := "{\"name\":\"李四\",\"class\":{\"id\":12037318,\"class\":\"1班\"}}"
	var p2 person
	json.Unmarshal([]byte(str), &p2) // 接收两个参数：byte字节切片和结构体指针 传指针是为了在函数内部修改p2
	fmt.Printf("p2: %v\n", p2)
}
